from PyQt5.QtWidgets import *       #部件，控件相关
from PyQt5.QtGui import *           #图片相关
from PyQt5.QtCore import *          #事件相关(鼠标等事件)

import sys                          

#自定义窗口，继承窗口
class MyWidget(QWidget):
    
    def __init__(self, parent=None):
        super().__init__(parent)
        
        self.setMinimumSize(800,800)                    #修改窗口的最小值
        self.setWindowIcon(QIcon("./img/豆包.jpg"))     #修改窗口图标
        self.setWindowTitle("豆包")                     #修改窗口的标题
        
        self.init_ui()
        
        

    def init_ui(self):
        
        self.start_x = -1       #起点x，默认值-1
        self.start_y = -1       #起点y，默认值-1
        self.gripWidth = -1     #一个格子的宽度
        self.gripHeight = -1    #一个格子的高度
        self.x = -1             #鼠标点击的位置x下标
        self.y = -2             #鼠标点击的位置y下标
        
        
    
    #绘图事件，继承于父类
    def paintEvent(self, event: QPaintEvent):
        
        #创建画家对象
        painter = QPainter(self)
        
        #画家绘制背景，就是绘制一张从头到尾的图片
        painter.drawPixmap(0, 0, self.width(), self.height(), QPixmap('./img/back2.png'))
        
        #画家绘制横线和竖线：起点x,y  终点x,y
        self.gripWidth = self.width() // 12         #一个格子的宽度
        self.gripHeight = self.height() // 12       #一个格子的高度
        
        self.start_x = self.gripWidth *2            #起点x
        self.start_y = self.gripHeight *2           #起点y
        
        #画棋盘
        for i in range(9):
            #画横线
            painter.drawLine(self.start_x, self.start_y + self.gripHeight*i, self.start_x + self.gripWidth*8, self.start_y +self.gripHeight*i)
            #画竖线
            painter.drawLine(self.start_x + self.gripWidth*i, self.start_y, self.start_x + self.gripWidth*i, self.start_y + self.gripHeight*8)
        
        
        #设置笔的样式
        pen = QPen(Qt.green, 1)     #不用其他颜色的笔看不出区别
        #把比给画家
        painter.setPen(pen)
        
        ##画棋子和绿框
        if self.x != -1:
            
            #画棋子
            painter.drawPixmap(self.x * self.gripWidth + self.start_x,
                               self.y * self.gripHeight + self.start_y,
                               self.gripWidth, self.gripHeight,
                               QPixmap('./img/black.png'))
            #画绿框
            painter.drawRect(self.x * self.gripWidth + self.start_x,
                               self.y * self.gripHeight + self.start_y,
                               self.gripWidth, self.gripHeight)
       
    #捕捉鼠标单击事件，获取鼠标点击的坐标
    def mousePressEvent(self, event:QMouseEvent):
        
        self.update()       #每次点击都更新绘画事件
        
        self.mouse_x = event.x()     #获取鼠标x坐标
        self.mouse_y = event.y()     #获取鼠标y坐标
        
        #print(mouse_x,mouse_y)
        
        #根据获取的值，转化为具体的坐标
        self.x = (self.mouse_x - self.start_x) // self.gripWidth      #获取具体棋子的x坐标
        self.y = (self.mouse_y - self.start_y) // self.gripHeight     #获取具体棋子的y坐标

        #画棋子要在绘图事件里面画
         
        #输出点击的坐标
        if self.x >= 0 and self.x < 8 and self.y >= 0 and self.y < 8:
            print("点击的坐标：", self.x, self.y)
        else:
            self.x = -1
            self.y = -1    
            #print("点击的坐标：", self.x, self.y)
            
# 作为主函数才会执行
if __name__ == '__main__':
    
    # 创建应用程序
    app = QApplication(sys.argv)

    # 创建窗口
    w = MyWidget()
    
    #显示窗口
    w.show()

    #等待窗口停止
    sys.exit(app.exec())